package com.cc.controller.web;

import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.StpUtil;
import com.cc.base.ResponseResult;
import com.cc.enums.RedisEnmu;
import com.cc.pojo.domain.Role;
import com.cc.pojo.domain.Router;
import com.cc.service.MenuService;
import com.cc.service.RoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author zhanghaibin
 */
@RestController
@RequestMapping("/admin")
@Slf4j
@ResponseBody
@Tag(name = "动态路由相关接口")
public class RouterController {
    /**
     * 获取动态路由
     *
     * @return
     */
//    @Operation(summary = "获取动态路由")
//    @GetMapping("/get-menu-list")
//    public ResponseResult<Object> router() {
//        ArrayList<Router> routers = new ArrayList<>();
//
//        // 创建子路由对象
//        Router baseChild = new Router(
//                "/list/base", "ListBase", "/list/base/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("基础列表页", "Base List"),
//                        null
//                ),
//                null
//        );
//
//
//        Router cardChild = new Router(
//                "/list/card", "ListCard", "/list/card/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("卡片列表页", "Card List"),
//                        null
//                ),
//                null
//        );
//
//
//        Router filterChild = new Router(
//                "/list/filter", "ListFilter", "/list/filter/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("筛选列表页", "Filter List"),
//                        null
//                ),
//                null
//        );
//
//
//        Router treeChild = new Router(
//                "/list/tree", "ListTree", "/list/tree/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("树状筛选列表页", "Tree List"),
//                        null
//                ),
//                null
//        );
//
//
//        // 创建父路由对象
//        Router listRouter = new Router(
//                "/list", "list", "LAYOUT", "/list/base",
//                new Router.Meta(
//                        new Router.Meta.Title("列表页", "List"),
//                        "view-list"
//                ),
//                new ArrayList<>(List.of(baseChild, cardChild, filterChild, treeChild))
//        );
//        routers.add(listRouter);
//
//        // 创建另一个子路由对象
//        Router baseFormChild = new Router(
//                "/form/base", "FormBase", "/form/base/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("基础表单页", "Base Form"),
//                        null
//                ),
//                null
//        );
//
//        Router stepFormChild = new Router(
//                "/form/step", "FormStep", "/form/step/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("分步表单页", "Step Form"),
//                        null
//                ),
//                null
//        );
//
//        // 创建另一个父路由对象
//        Router formRouter = new Router(
//                "/form", "form", "LAYOUT", "/form/base",
//                new Router.Meta(
//                        new Router.Meta.Title("表单页", "Form"),
//                        "edit-1"
//                ),
//                new ArrayList<>(List.of(baseFormChild, stepFormChild))
//        );
//        routers.add(formRouter);
//
//
//        //用户管理子路由
//        Router userChildRouter = new Router(
//                "/userlist/regularuserlist", "RegularUserList", "/userlist/regularuserlist/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("普通用户管理", "RegularUserList"), null
//                ),
//                null);
//        //用户管理子路由  todo 注意name名称不要一样
//        Router adminChildRouter = new Router(
//                "/userlist/adminuserlist", "AdminUserList", "/userlist/adminuserlist/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("管理员用户管理", "AdminUserList"), null
//                ),
//                null);
//        // 创建用户管理父由对象
//        Router userRouter = new Router(
//                "/userlist", "UserList", "LAYOUT", "/userlist/regularuserlist",
//                new Router.Meta(
//                        new Router.Meta.Title("用户管理", "UserList"),
//                        "view-list"
//                ),
//                new ArrayList<>(List.of(userChildRouter, adminChildRouter))
//        );
//        routers.add(userRouter);
//
//        //菜单管理子菜单
//        Router menuRouter = new Router(
//                "/syslist/menulist", "MenuList", "syslist/menulist/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("菜单管理", "MenuList"), null
//                ),
//                null);
//
//        Router roleRouter = new Router(
//                "/syslist/rolelist", "RoleList", "syslist/rolelist/index", null,
//                new Router.Meta(
//                        new Router.Meta.Title("角色管理", "RoleList"), null
//                ),
//                null);
//
//        // 创建系统管理父由对象
//        Router sysRouter = new Router(
//                "/syslist", "syslist", "LAYOUT", "/syslist/menulist",
//                new Router.Meta(
//                        new Router.Meta.Title("系统管理", "List"),
//                        "view-list"
//                ),List.of(menuRouter,roleRouter)
//        );
//        routers.add(sysRouter);
//
//
//
//
//        return ResponseResult.ok(routers);
//    }
    @Resource
    private MenuService menuService;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Resource
    private RoleService roleService;

    /**
     * 获取动态路由
     *
     * @return
     */
    @Operation(summary = "获取动态路由")
    @GetMapping("/get-menu-list")
    public ResponseResult<List<Router>> getMenuList() {
        int userId = StpUtil.getLoginIdAsInt();
        return menuService.getMenuList(userId);
    }


    /**
     * 清除缓存
     *
     * @return
     */
    @Operation(summary = "清除缓存")
    @GetMapping("/clearCache")
    @SaCheckRole("superAdmin")
    public ResponseResult<Boolean> clearCache() {
        log.info("清除缓存开始---start");
        //获取当前登录id
        int userId = StpUtil.getLoginIdAsInt();
        //清除当前用户的角色缓存
        SaManager.getSaTokenDao().delete(RedisEnmu.SATOKEN_LOGIN_ID_FIND_ROLE + userId);
        //清除角色对应权限的缓存
        //获取所有角色类型
        List<Role> roles = roleService.list();
        for (Role role : roles) {
            SaManager.getSaTokenDao().delete(RedisEnmu.SATOKEN_ROLE_FIND_PERMISSION + role.getRoleKey());
        }
        //清理动态路由缓存
        redisTemplate.delete(RedisEnmu.CC_MENU_ROUTE_LIST+userId);
        log.info("清除缓存结束---end");
        return ResponseResult.ok(Boolean.TRUE);
    }
}
